﻿#include "CCaptureProcess.h"
#include <string>

int main()
{
    av_register_all();
    return 0;
}

#ifdef __cplusplus
extern "C" {
#endif
    static std::vector<ImageData*> vecImageDatas;
    static int nImageCount = 0;

    /*
    * sPath : 视频文件路径
    * 返回值 : 生成的帧图片个数
    */
    int generateVideoFrames(const std::string& sPath, int width, int height)
    {
        AVFormatContext* pFormatCtx = avformat_alloc_context();

        //打开视频文件
        if (avformat_open_input(&pFormatCtx, sPath.c_str(), nullptr, nullptr) < 0) {
            fprintf(stderr, "avformat_open_input failed\n");
            return 0;
        }

        vecImageDatas.clear();
        captureProcess(pFormatCtx, vecImageDatas, width, height);

        //释放资源
        avformat_close_input(&pFormatCtx);

        if (vecImageDatas.empty())
        {
            return 0;
        }

        nImageCount = vecImageDatas.size();
        return nImageCount;
    }

    ImageData* getImage(const int nIndex)
    {
        if (nIndex < 0 || nIndex >= nImageCount)
        {
            return nullptr;
        }

        return vecImageDatas[nIndex];
    }

    void freeImages()
    {
        for (int i = 0; i < nImageCount; ++i)
        {
            ImageData* pImage = vecImageDatas[i];
            if (nullptr != pImage)
            {
                delete pImage;
                pImage = nullptr;
            }
        }

        vecImageDatas.clear();
    }
#ifdef __cplusplus
};
#endif


